
/**
 * @author VernHe
 * @date 2021年05月26日 19:03
 */
public class Solution_101 {
    public boolean isSymmetric(TreeNode root) {
        // 特殊情况判断
        if (root == null) {
            return false;
        }
        // 深度优先遍历，左右子树同时遍历
        return dfs(root.left, root.right);
    }

    // 判断左右子树是否对称
    private boolean dfs(TreeNode left, TreeNode right) {
        // 左右两边都为空，返回真
        // 左右两边只有一个为空，返回假
        // 左右两边值相等，返回真
        if (left == null && right == null) {
            return true;
        }
        if (left == null || right == null) {
            return false;
        }
        // 需要注意的是：值相等的时候，不能返回，而是继续往后递归
//        if (left.val == right.val) {
//            return true;
//        }
        if (left.val != right.val) {
            return false;
        }

        return dfs(left.left, right.right) && dfs(left.right, right.left);
    }

}
